package net.blank.ui.core
{
	import flash.text.TextField;
	import flash.text.TextFieldType;
	import flash.text.TextFormat;
	
	/**
	 * 文本输入框
	 * @author blank
	 * 
	 */
	public class TextInput extends UIComponent
	{
		/**
		 * 文本框
		 */
		protected var txfText:TextField;
		
		/**
		 * 左边距
		 */
		protected var _paddingLeft:Number;
		
		/**
		 * 右边距
		 */
		protected var _paddingTop:Number;
		
		/**
		 * 上边距
		 */
		protected var _paddingRight:Number;
		
		/**
		 * 下边距
		 */
		protected var _paddingBottom:Number;
		
		/**
		 * 文本格式
		 */
		protected var _textFormat:TextFormat;
		
		/**
		 * 需要更新文本
		 */
		private var isNeedUpdateBounds:Boolean;
		
		/**
		 * 需要更新文本格式
		 */
		private var isNeedUpdateFormat:Boolean;
		
		override protected function update():void{
			super.update();
			
			if(isNeedUpdateBounds){
				txfText.width=_width - _paddingLeft - _paddingRight + 4;
				txfText.height=_height - _paddingTop - _paddingBottom + 4;
				txfText.x=_paddingLeft - 2;
				txfText.y=_paddingTop - 2;
				
				isNeedUpdateBounds=false;
			}
			
			if(isNeedUpdateFormat){
				txfText.defaultTextFormat=_textFormat;
				txfText.setTextFormat(_textFormat);
			}
		}
		
		/**
		 * 更新边界
		 * 
		 */
		public function updateBounds():void{
			isNeedUpdateBounds=true;
			
			invalidate();
		}
		
		/**
		 * 更新文本格式
		 * 
		 */
		public function updateFormat():void{
			isNeedUpdateFormat=true;
			
			invalidate();
		}
		
		/**
		 * 大小发生改变,更新文本显示
		 * @param evt
		 * 
		 */
		protected function resizeHandler(evt:UIEvent):void{
			updateBounds();
		}
		
		/**
		 * 标签
		 * 
		 */
		public function TextInput(){
			txfText=new TextField();
			
			super();
			
			mouseEnabled=false;
			
			txfText.type=TextFieldType.INPUT;
			addChild(txfText);
			
			addEventListener(UIEvent.RESIZE,resizeHandler);
		}
		
		/**
		 * 文本
		 * @param value
		 * 
		 */
		public function set text(value:String):void{
			txfText.text=value;
		}
		public function get text():String{
			return txfText.text;
		}
		
		/**
		 * 左边距(文本到左边框的像素距离)
		 * @param value
		 * 
		 */
		public function set paddingLeft(value:Number):void{
			if(value != _paddingLeft){
				_paddingLeft=value;
				
				updateBounds();
			}
		}
		public function get paddingLeft():Number{
			return _paddingLeft;
		}
		
		/**
		 * 上边距(文本到上边框的像素距离)
		 * @param value
		 * 
		 */
		public function set paddingTop(value:Number):void{
			if(value != _paddingTop){
				_paddingTop=value;
				
				updateBounds();
			}
		}
		public function get paddingTop():Number{
			return _paddingTop;
		}
		
		/**
		 * 右边距(文本到右边框的像素距离)
		 * @param value
		 * 
		 */
		public function set paddingRight(value:Number):void{
			if(value != _paddingRight){
				_paddingRight=value;
				
				updateBounds();
			}
		}
		public function get paddingRight():Number{
			return _paddingRight;
		}
		
		/**
		 * 下边距(文本到下边框的像素距离)
		 * @param value
		 * 
		 */
		public function set paddingBottom(value:Number):void{
			if(value != _paddingBottom){
				_paddingBottom=value;
				
				updateBounds();
			}
		}
		public function get paddingBottom():Number{
			return _paddingBottom;
		}
		
		/**
		 * 文本格式
		 * @param value
		 * 
		 */
		public function set textFormat(value:TextFormat):void{
			if(value != _textFormat){
				_textFormat=value;
				if(!value){
					_textFormat=new TextFormat("_seri",12,0x000000);
				}
				
				updateFormat();
			}
		}
		public function get textFormat():TextFormat{
			return _textFormat;
		}
		
		/**
		 * 对齐方式
		 * @param value
		 * 
		 */
		public function set hAlign(value:String):void{
			if(value != _textFormat.align){
				_textFormat.align=value;
				
				updateFormat();
			}
		}
		public function get hAlign():String{
			return _textFormat.align;
		}
		
		/**
		 * 字体名
		 */
		public function set fontName(value:String):void{
			if(value != _textFormat.font){
				_textFormat.font=value;
				
				updateFormat();
			}
		}
		public function get fontName():String{
			return _textFormat.font;
		}
		
		/**
		 * 字号
		 */
		public function set fontSize(value:Number):void{
			if(value != _textFormat.size){
				_textFormat.size=value;
				
				updateFormat();
			}
		}
		public function get fontSize():Number{
			return _textFormat.size as Number;
		}
		
		/**
		 * 字体颜色
		 */
		public function set color(value:uint):void{
			if(value != _textFormat.color){
				_textFormat.color=value;
				
				updateFormat();
			}
		}
		public function get color():uint{
			return _textFormat.color as uint;
		}
		
		/**
		 * 是否粗体
		 */
		public function set isBold(value:Boolean):void{
			if(value != _textFormat.bold){
				_textFormat.bold=value;
				
				updateFormat();
			}
		}
		public function get isBold():Boolean{
			return _textFormat.bold;
		}
		
		/**
		 * 是否斜体
		 */
		public function set isItalic(value:Boolean):void{
			if(value != _textFormat.italic){
				_textFormat.italic=value;
				
				updateFormat();
			}
		}
		public function get isItalic():Boolean{
			return _textFormat.italic;
		}
		
		/**
		 * 是否使用嵌入字体
		 */
		public function set isEmbedded(value:Boolean):void{
			if(value != txfText.embedFonts){
				txfText.embedFonts=value;
			}
		}
		public function get isEmbedded():Boolean{
			return txfText.embedFonts;
		}
		
		/**
		 * @copy flash.text.TextField#restrict
		 * @param value
		 * 
		 */
		public function set restrict(value:String):void{
			txfText.restrict=value;
		}
		public function get restrict():String{
			return txfText.restrict;
		}
		
		/**
		 * @copy flash.text.TextField#displayAsPassword
		 * @param value
		 * 
		 */
		public function set isPassWord(value:Boolean):void{
			txfText.displayAsPassword=value;
		}
		public function get isPassWord():Boolean{
			return txfText.displayAsPassword;
		}
		
		/**
		 * @copy flash.text.TextField#maxChars
		 * @param value
		 * 
		 */		
		public function set maxChars(value:int):void{
			txfText.maxChars=value;
		}
		public function get maxChars():int{
			return txfText.maxChars;
		}
		
		override public function reset():void{
			super.reset();
			
			_textFormat=new TextFormat("_seri",12,0x000000);
			
			_paddingLeft=2;
			_paddingTop=2;
			_paddingRight=2;
			_paddingBottom=2;
		}
		
		override public function destroy():void{
			super.destroy();
			
			_textFormat=null;
			txfText=null;
		}
		
		/**
		 * 拷贝文本格式
		 * @param textFormat
		 * @return 
		 * 
		 */
		public static function cloneTextFormat(textFormat:TextFormat):TextFormat{
			var tf:TextFormat=new TextFormat(
				textFormat.font,
				textFormat.size,
				textFormat.color,
				textFormat.bold,
				textFormat.italic,
				textFormat.underline,
				textFormat.url,
				textFormat.target,
				textFormat.align,
				textFormat.leftMargin,
				textFormat.rightMargin,
				textFormat.indent,
				textFormat.leading
			);
			tf.blockIndent=textFormat.blockIndent;
			tf.bullet=textFormat.bullet;
			tf.kerning=textFormat.kerning;
			tf.letterSpacing=textFormat.letterSpacing;
			
			return tf;
		}
	}
}